iosapic_intr_info[vector].dmode = delivery;
iosapic_intr_info[vector].trigger = trigger;
-#ifndef CONFIG_XEN
+#ifdef CONFIG_XEN
+ if (is_running_on_xen())
+ return 0;
+#endif
+
if (trigger == IOSAPIC_EDGE)
irq_type = &irq_type_iosapic_edge;
else
__FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
idesc->handler = irq_type;
}
-#endif
return 0;
}
* it ends up to issue several memory accesses upon percpu data and
* thus adds unnecessary traffic to other paths.
*/
-irqreturn_t handle_reschedule(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t
+handle_reschedule(int irq, void *dev_id, struct pt_regs *regs)
{
return IRQ_HANDLED;
}
}
-void
+static void
xen_bind_early_percpu_irq (void)
{
int i;
{
#ifdef CONFIG_XEN
/* Maybe put into platform_irq_init later */
- struct callback_register event = {
- .type = CALLBACKTYPE_event,
- .address = (unsigned long)&xen_event_callback,
- };
- xen_init_IRQ();
- BUG_ON(HYPERVISOR_callback_op(CALLBACKOP_register, &event));
- late_time_init = xen_bind_early_percpu_irq;
+ if (is_running_on_xen()) {
+ struct callback_register event = {
+ .type = CALLBACKTYPE_event,
+ .address = (unsigned long)&xen_event_callback,
+ };
+ xen_init_IRQ();
+ BUG_ON(HYPERVISOR_callback_op(CALLBACKOP_register, &event));
+ late_time_init = xen_bind_early_percpu_irq;
#ifdef CONFIG_SMP
- register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction);
-#endif
-#else /* CONFIG_XEN */
- register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL);
+ register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction);
+#endif /* CONFIG_SMP */
+ }
#endif /* CONFIG_XEN */
+ register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL);
#ifdef CONFIG_SMP
register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction);
#endif